package com.lyf.scm.admin.domain.remote.basedata;

import com.github.pagehelper.PageInfo;
import com.lyf.scm.admin.domain.remote.basedata.dto.*;
import com.lyf.scm.common.model.SalesPlanSelectDTO;
import com.rome.arch.core.clientobject.Response;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 调用数据字典接口
 *
 * @author wuzhuang
 * @date 2020/06/30
 */
@FeignClient(name = "basedata-core")
public interface BaseDataRemote {
    /**
     * 根据parentCode获取所有下级地址根
     *
     * @param parentCode
     * @return
     */
    @GetMapping("/v1/area/searchByParentCode")
    Response<List<SalesPlanSelectDTO>> getSubAreaCode(@RequestParam("parentCode") String parentCode);

    /**
     * 根据Level等级获取区域信息
     *
     * @param level    水平
     * @param pageNum  页面num
     * @param pageSize 页面大小
     * @return {@link Response<PageInfo<AreaDTO>>}
     */
    @PostMapping("/v1/area/searchAreaByLevels")
    Response<PageInfo<AreaDTO>> getAreaByLevels(@RequestBody List<Integer> level, @RequestParam(value = "pageNum",defaultValue = "1") Integer pageNum, @RequestParam(value = "pageSize",defaultValue = "100") Integer pageSize);

    /**
     * 根据渠道等级查询渠道信息
     *
     * @param level
     * @return
     */
    @GetMapping("/api/v1/kpChannel/external/queryByLevel")
    Response<List<ChannelDTO>> getChannelByLevel(@RequestParam("level") Integer level);


    /**
     * 根据渠道code集合获取渠道列表
     * @param channelCodeList
     * @return
     */
    @PostMapping("/api/v1/kpChannel/queryParentChannelsByChannels")
    Response<List<ChannelDTO>> listChannelCodeByList(@RequestBody List<String> channelCodeList);

    /**
     * 根据父渠道批量获取子渠道
     *
     * @param channelCodeList 频道代码列表
     * @return {@link Response<List<ChannelDTO>>}
     */
    @PostMapping("/api/v1/kpChannel/external/queryByParentChannels")
    Response<List<ChannelDTO>> queryByParentChannels(@RequestBody List<String> channelCodeList);


    /**
     * 根据父渠道查询子渠道列表(单个查询)
     *
     * @param parentChannel
     * @return {@link Response<List<ChannelDTO>>}
     */
    @GetMapping("/api/v1/kpChannel/queryByParentChannel")
    Response<List<ChannelDTO>> queryByParentChannel(@RequestParam("parentChannel") String parentChannel);

    /**
     * 根据地区name模糊查询地区信息
     * @param name
     * @return
     */
    @GetMapping("/v1/area/searchAreaByName")
    Response<List<AreaDTO>> listAreaInfoByName(@RequestParam("name") String name);

    /**
     * 批量根据parentCode获取所有下级
     *
     * @param parentCodes 父代码
     * @return {@link Response<List<AreaDTO>>}
     */
    @PostMapping("/v1/area/batchSearchByParentCode")
    Response<List<AreaDTO>> batchSearchByParentCode(@RequestBody List<String> parentCodes);

    /**
     * 根据销售组织code获取销售组织信息
     * @param orgCode
     * @return
     */
    @GetMapping("/saleorg/v1/search/saleorg/{orgCode}")
    Response<SaleOrgDTO> getSaleOrg(@PathVariable("orgCode") String orgCode);

    /**
     * 查询所有公司信息
     * @return {@link List< SaleOrgDTO >}
     */
    @GetMapping("/saleorg/v1/company")
    Response<List<SaleOrgDTO>> listSaleOrg();


    /**
     * 查询所有的门店
     *
     * @param storeSimpleParamDTO 存储简单的参数dto
     * @param pageNum             页面num
     * @param pageSize            页面大小
     * @return {@link Response<StoreDTO>}
     */
    @PostMapping("/v1/store/kp/page")
    Response<PageInfo<StoreDTO>> listStore(@RequestBody StoreDTO storeSimpleParamDTO, @RequestParam(value = "pageNum",defaultValue = "1") Integer pageNum,
                                 @RequestParam(value = "pageSize",defaultValue = "99") Integer pageSize);

    /**
     * 根据门店codes批量获取门店性质
     *
     * @param storeCodes
     * @return
     */
    @PostMapping("/v1/store/kp/selectStoreListByCodes")
    Response<List<StoreDTO>> getStoreProperties(@RequestBody List<String> storeCodes);

    /**
     * 根据codes获取区域信息
     * @param codes 区域codes
     * @return
     */
    @PostMapping("v1/area/searchAreaByCodes")
    Response<List<AreaDTO>> listAreaInfoByCode(@RequestBody List<String> codes);

    /**
     * 根据省市区查询门店
     *
     * @param storeParamDTO 存储参数dto
     * @param pageNum       页面num
     * @param pageSize      页面大小
     * @return {@link Response<List<StoreDTO>>}
     */
    @PostMapping("/v1/store/selectStoreByAreaCode")
    Response<PageInfo<StoreDTO>> selectStoreByAreaCode(@RequestBody SearchStoreParamDTO storeParamDTO,
                                                   @RequestParam("pageNum") Integer pageNum,
                                                   @RequestParam("pageSize") Integer pageSize);


    /**
     * 根据省code查询编码
     *
     * @param provinceCodeList 省代码列表
     * @param pageNum          页面num
     * @param pageSize         页面大小
     * @return {@link Response<PageInfo<StoreDTO>>}
     */
    @PostMapping("/v1/store/selectStoreByProvinceCode")
    Response<PageInfo<StoreDTO>> selectStoreByProvinceCode(@RequestBody List<String> provinceCodeList,
                                                            @RequestParam("pageNum") Integer pageNum,
                                                           @RequestParam("pageSize") Integer pageSize);


    /**
     * 根据市code查询编码
     *
     * @param cityCodeList 城市代码列表
     * @param pageNum      页面num
     * @param pageSize     页面大小
     * @return {@link Response<PageInfo<StoreDTO>>}
     */
    @PostMapping("/v1/store/selectStoreByCityCode")
    Response<PageInfo<StoreDTO>> selectStoreByCityCode(@RequestBody List<String> cityCodeList,
                                                           @RequestParam("pageNum") Integer pageNum,
                                                           @RequestParam("pageSize") Integer pageSize);


    /**
     * 根据地区编码获取地区层级信息
     *
     * @param areaList
     * @return
     */
    @PostMapping("/v1/area/selectLevelRelationByCode")
    Response<List<AreaLevelDTO>> listRelationByArea(@RequestBody List<String> areaList);
    /**
     * 根据市code查询编码
     *
     * @param districtCodeList 城市代码列表
     * @param pageNum      页面num
     * @param pageSize     页面大小
     * @return {@link Response<PageInfo<StoreDTO>>}
     */
    @PostMapping("/v1/store/selectStoreByDistrictCode")
    Response<PageInfo<StoreDTO>> selectStoreByDistrictCode(@RequestBody List<String> districtCodeList,
                                                       @RequestParam("pageNum") Integer pageNum,
                                                       @RequestParam("pageSize") Integer pageSize);
}
